DOCUMENTATION

MAME Debugger:
mame nms8280 mgear -debug
[Press Scroll-Lock to enable/disable MAME menus (this was Fn+C for my laptop)]

	Set Breakpoint at instruction 1234 when memory ABCD equals EF:
	bpset 1234, maincpu.pb@abcd==ef

Z80 Assembly:
https://clrhome.org/table/

Metal Gear Maps:
https://www.vgmaps.com/Atlas/MSX/index.htm#M

Metal Gear Scripts:
https://www.geocities.ws/nekurahoka/

Metal Gear Disassembly:
https://github.com/GuillianSeed/MetalGear



CHANGES:

01. Can use keyboard Q-W-E-R for menus, and F for punch.
    Q = Quit (Pause), W = Weapons, E = Equipment, R = Radio, F = Fight (Punch).
02. Don't have to press F5 to continue.
03. Can swap between menus.
04. Rations/Ammo fill up completely.
05. Don't have to select keycard to open doors.
06. Keycards group together in inventory.
07. Game auto-saves when you EXIT the elevator.
08. Can open menus in elevators.
09. All dialogue is skippable.
10. Can use ration in equipment menu with punch button.

11. Bosses flash red when damaged.
11a. Fixed one wrong tile on Hind-D. Changed color of nearby crates.

12. Big Boss calls to explain how to get Schneider's frequency.
12a. Auto-dial disabled after calls to make this process seamless.
13. Schneider calls for bombable walls in the basement.
14. Jennifer calls at 4-Star Rank for Locked Door / Rocket Launcher.
14a. Jennifer's calls count as "listened to" even if you skip her text.

15. Removed bombable wall in basement leading to Enemy Uniform.

16. Oxygen Tank is in Compass room. Compass is in room next to Coward Duck.
16a. Oxygen Tank renamed from "BOMBE" to "SCUBA". Ration in Oxygen Tank room.
16b. Radio messages about location of Oxygen Tank / Compass disabled.

17. Total Explosives unaffected by rank. Maximum capacity is always 20.
18. Explosives/Ammo added to Metal Gear fight to prevent possible soft-lock.
19. Electric Grid outside Coward Duck altered to prevent possible soft-lock.
20. Door below Shootgunner changed to Card 1 Lock to prevent possible soft-lock.
21. Ration added to Building 2 Roof to prevent possible soft-lock.
22. Ration added to Building 2 Basement to prevent possible soft-lock.
23. Ration added to Grey Fox Cell to prevent possible soft-lock.

24. Sentinel guards have a minimum wait-time before turning (still randomised).
25. Modified guard positions/paths to prevent immediate alerts.




FUTURE: 
-Space Skip Text (Might Shoot Prisoners)
-Mines Slowdown



European version is nearly identical to Japanese version except:
- no region-lock
- no textbox when collecting items
- 33 radio messages removed (including an incoming call in the first room with cameras)
- two prisoner messages removed (use parachute, seek basement elevator).

https://tcrf.net/Metal_Gear_(MSX2)#Regional_Differences



FREE SPACE:

PAL VERSION = 1182 bytes: 		JPN VERSION = 95 bytes:
7FAF - 7FFF (81 bytes)
DFCC - DFFF (52 bytes)			DFDB-DFFF (37 bytes)
13FE6 - 13FFF (26 bytes)		13FE6-13FFF (26 bytes)
19C3C - 19FFF (964 bytes)		19FE0-19FFF (32 bytes)
1FFA7 - 1FFFF (89 bytes)



USED SPACE:

Keyboard = 13 bytes at 7FF3
	 = 61 bytes at 19FC0	// bankswap (called every cycle)
MenuSwap = 44 bytes at 7FB0
Keycards = 18 bytes at 7FE0
AutoCall = 24 bytes at 19F80	// bankswap (called once after msg)
JenCalls = 26 bytes at 19FA0
MGrItems = 09 bytes at DFCC
GroupKey = 29 bytes at 19F60	// bankswap (called once when pickup item)
	 = 19 bytes at DFE0
Sentinel = 10 bytes at DFD6
BossHurt = 44 bytes at 19E90	// bankswap (called once on new screen)
	  146 bytes at 19EC0	// bankswap (called every cycle - timer)



Keyboard Bits: 	FBDA-FBDF: 7654 3210   /   ;][/ =-98  /  BA~- .,\-   /   JIHG FEDC   /   RQPO NMLK   /   ZYXW VUTS

		FBE0-FBE2: F3_F2_F1_Pgdn  Caps_Pgup_Lctrl_Lshft   /   Entr_End_Bck_Rctrl  Tab_Esc_F5_F4   /   →↓↑←  Del_Ins_Home_Space

		FBE3-FBE4: [NUMPAD] 4321 0/+*   /   [NUMPAD] .Entr-9 8765


STABILITY FIX:

Radio code is close to breaking. Too many instructions per cycle.
It should be reaching instruction $4246 every cycle and waiting for the system interrupt.
But sometimes the system interrupt occurs before the cycle is finished - such as in Room 24.
The below code skips the loading of Snake/Enemy Sprites when in menus.

2F47:						NEW CODE:
 6F47  ld   a,($C151)	3A 51 C1						// C151 = GameMode (0=Playing,1=NextRoom,2=Weapons,3=Equip,4=Radio,etc.)
 6F4A  cp   $02		FE 02		|	6F4A  sub  $02		D6 02
 6F4C  jr   z,$6F55	28 07		|	6F4C  cp   $03		FE 03
 | 6F4E  cp   $03	FE 03		|	6F4E  jr   c,$6F71 o-|	38 21	// If GameMode is 2/3/4, jump to UpdateControls
 | 6F50  jr   z,$6F55	28 03		|	6F50  nop nop	     |	00 00
 | | 6F52  call $8FD0	CD D0 8F	// DrawCallAndCountdownText  |
 6F55  call $53AB	CD AB 53	// LoadSnakeSprites	     |
 6F58  call $5318	CD 18 53	// ""			     |
 6F5B  call $535E	CD 5E 53	// ""			     |
 6F5E  call $65FB	CD FB 65	// ""			     |
 6F61  call $8176	CD 76 81	// ""			     |
 6F64  ld   a,($C130)	3A 30 C1				     |
 6F67  cp   $F0		FE F0					     |
 6F69  jr   nc,$6F71	30 06					     |
 | 6F6B  call $7458	CD 58 74	// LoadEnemySprites	     |
 | 6F6E  call $5599	CD 99 55	// ""			     |
 6F71  call $7CAA	CD AA 7C	// UpdateControls <----------|
 6F74  ld   a,($C151)	3A 51 C1
 6F77  call $41EA	CD EA 41	// JumpIndex

D6 02 FE 03 38 21 00 00


KEYBOARD CODE (F = Punch):

3CD8:
 7CD8  ld   a,$04	3E 04
 7CDA  call $0141	CD 41 01	|	7CDA  call $BFF3	CD F3 BF	// Call below code instead

7FF3:
 BFF3  call $0141	CD 41 01	// A = RQPO NMLK
 BFF6  ld   e,a		5F		// E = RQPO NMLK
 BFF7  ld   a,$03	3E 03
 BFF9  call $0141	CD 41 01	// A = JIHG FEDC
 BFFC  or   $F7		F6 F7		// A = ---- F---
 BFFE  and  e		A3		// A = RQPO (NF)MLK
 BFFF  ret		C9

CD 41 01 5F 3E 03 CD 41 01 F6 F7 A3 C9


KEYBOARD CODE (QWER = Pause/Weapon/Equip/Radio):

3D06:
 7D06  ld   a,$06	3E 06		|	7D06  di		F3		// disable interrupts
 7D08  call $0141	CD 41 01	|	7D07  ld   hl,$A000	21 00 A0
 7D0B  cpl		2F		|	7D0A  ld   (hl),$0C	36 0C		// change A000-BFFF bank to 0C
 7D0C  rlca		07		|	7D0C  call $BFC0	CD C0 BF
 7D0D  rlca		07		|	7D0F  ld   (hl),$03	36 03		// change A000-BFFF bank to 03
 7D0E  rlca		07		|	7D11  ei		FB		// enable interrupts
 7D0F  and  $07		E6 07		|	
 7D11  ld   e,a		5F		|	// F3 21 00 A0 36 0C CD C0 BF 36 03 FB

19FC0:
 BFC0  ld   a,$06	3E 06
 BFC2  call $0141	CD 41 01	// A = F3_F2_F1_Pgdn  Caps_Pgup_Lctrl_Lshft
 BFC5  cpl		2F
 BFC6  rlca		07
 BFC7  rlca		07
 BFC8  rlca		07
 BFC9  and  $07		E6 07		// A = 0000 0_F3_F2_F1
 BFCB  ld   e,a		5F		// E = 0000 0_F3_F2_F1

 BFCC  ld   a,$04	3E 04
 BFCE  call $0141	CD 41 01	// A = RQPO NMLK
 BFD1  bit  6,a		CB 77		// CHECK Q (F1)
 BFD3  jr   nz,$BFD7	20 02
 | BFD5  set  0,e	CB C3		// 0000 000Q
 BFD7  rlca		07		// CHECK R (F4)
 BFD8  jr   c,$BFE2	38 08
 | BFDA  ld   a,($C008)	3A 08 C0	// check if game paused
 | BFDD  rrca		0F
 | BFDE  jr   c,$BFE2	38 02		// if game paused, ignore R press
 | | BFE0  set  3,e	CB DB		// 0000 R00Q
 BFE2  ld   a,$05	3E 05
 BFE4  call $0141	CD 41 01	// A = ZYXW VUTS
 BFE7  bit  4,a		CB 67		// CHECK W (F2)
 BFE9  jr   nz,$BFED	20 02
 | BFEB  set  1,e	CB CB		// 0000 R0WQ
 BFED  ld   a,$03	3E 03
 BFEF  call $0141	CD 41 01	// A = JIHG FEDC
 BFF2  bit  2,a		CB 57		// CHECK E (F3)
 BFF4  jr   nz,$BFF8	20 02
 | BFF6  set  2,e	CB D3		// 0000 REWQ
 BFF8  ret		C9

3E 06 CD 41 01 2F 07 07 07 E6 07 5F
3E 04 CD 41 01 CB 77 20 02 CB C3 07 38 08 3A 08 C0 0F 38 02 CB DB
3E 05 CD 41 01 CB 67 20 02 CB CB 3E 03 CD 41 01 CB 57 20 02 CB D3 C9



AUTOMATIC CONTINUE:

27F4:
 67F4  ld   a,($C113)	3A 13 C1   |				// A = FKeysHold
 67F7  bit  4,a		CB 67	   |				// Was F5 Pressed?
 67F9  ret  z		C8	   |	67F9  nop	00	// Ignore
 67FA  ld   hl,$92A0	21 A0 92


               G  A  M  E        O  V  E  R
5292  FF 58 58 47 41 4D 45 00 00 4F 56 45 52 
529F  FE 						|	529F  FF		// END TEXT HERE
52A0  50 70 43 4F 4E 54 49 4E 55 45 00 00 46 35 FF
            C  O  N  T  I  N  U  E        F  5



SWITCH MENUS:

2F47:
 6F47  ld   a,($C151)	3A 51 C1	|	6F47  call $BFB0	CD B0 BF
 6F4A  cp   $02		FE 02		|	
 6F4C  jr   z,$6F55	28 07		|	
 6F4E  cp   $03		FE 03		|	
 6F50  jr   z,$6F55	28 03		|	

7FB0:
 BFB0  ld   a,($C151)		3A 51 C1	// (C151) = Game Mode (0=Playing,1=NextRoom,2=Weapons,3=Equipment,4=Radio,5=Truck,etc.)
 BFB3  push af			F5
 BFB4  ld   c,$02		0E 02
 BFB6  sub  c			91
 BFB7  cp   $03			FE 03
 BFB9  jr   nc,$BFDA		30 1F		// If Game Mode is not 2/3/4, exit
 | BFBB  ld   a,($C112)		3A 12 C1	// (C112) = F1-F8 Key Press
 | BFBE  rra			1F
 | BFBF  rra			1F
 | BFC0  jr   c,$BFCC		38 0A		// If Bit1 set (F2), C=2
 | | BFC2  inc  c		0C
 | | BFC3  rra			1F
 | | BFC4  jr   c,$BFCC		38 06		// If Bit2 set (F3), C=3
 | | | BFC6  inc  c		0C
 | | | BFC7  rra		1F
 | | | BFC8  jr   c,$BFCC	38 02		// If Bit3 set (F4), C=4
 | | | | BFCA  pop  af		F1
 | | | | BFCB  ret		C9		// If nothing pressed (or F1/F5/Enter), exit
 | BFCC  pop  af		F1
 | BFCD  push af		F5
 | BFCE  cp   c			B9
 | BFCF  jr   z,$BFDA		28 09		// If F-Key pressed matches the already open Game Menu, exit
 | | BFD1  ld   a,($C0F2)	3A F2 C0
 | | BFD4  ld   ($C0F1),a	32 F1 C0	// (C0F1) = (C0F2)	RestoreMusicFlag = SavedMusicFlag	// If music saved, set for restore
 | | BFD7  call $70F6		CD F6 70	// (C151) = C	(2/3/4 = F2/F3/F4 = Weapons/Eqipment/Radio)	// Function saves/restores music
 BFDA  pop  af			F1
 BFDB  ret			C9

3A 51 C1 F5 0E 02 91 FE 03 30 1F 
3A 12 C1 1F 1F 38 0A 0C 1F 38 06 0C 1F 38 02 F1 C9
F1 F5 B9 28 09 3A F2 C0 32 F1 C0 CD F6 70 F1 C9



FILL AMMO / RATIONS:

4F27:
 8F27  add  a,(hl)	86		|	8F27  and  a		A7
 8F28  daa		27		|	8F28  jr   z,$8F2E	28 04	// If A = 0, skip (e.g. when first pickup new gun)
 8F29  ld   (hl),a	77		|	| 8F2A  inc  hl		23	// Go to hundreds byte
 8F2A  jr   nc,$8F2E	30 02		|	| 8F2B  inc  (hl)	34
 8F2C  | inc  hl	23		|	| 8F2C  inc  (hl)	34
 8F2D  V inc  (hl)	34		|	V 8F2D  inc  (hl)	34	// Adds 300 to total
 8F2E  ld   a,$01	3E 01

A7 28 04 23 34 34 34



KEYCARDS:

394F:
 794F  ld   a,($C135)	3A 35 C1	|	794F  call $BFE0	CD E0 BF
 7952  cp   d		BA		|	
 7953  jp   nz,$7A77	C2 77 7A	|

7FE0:
 BFE0  ld   a,($C13B)	3A 3B C1	// Check EquipmentRemoved Flag
 BFE3  dec  a		3D
 BFE4  ret  z		C8		// A = 0
 BFE5  push hl		E5
 BFE6  ld   h,$C5	26 C5
 BFE8  ld   a,$9F	3E 9F
 BFEA  add  a,d		82		// d = KeyCardRequired (0E to 15)
 BFEB  ld   l,a		6F
 BFEC  ld   a,(hl)	7E		// Check if card taken ($C5AD to $C5B4)
 BFED  pop  hl		E1
 BFEE  and  a		A7
 BFEF  ret  z		C8		// A = 0
 BFF0  ld   a,d		7A		// If player has card, A = KeyCardRequired
 BFF1  ret		C9

3A 3B C1 3D C8
E5 26 C5 3E 9F 82 6F 7E E1 A7 C8 7A C9



GROUP KEYCARDS:

Unlock all equipment slots:

7BB:
 47BB  ld   hl,$C530	21 30 C5
 47BE  ld   b,$19	06 19		|	47BE  ld   b,$1B	06 1B	(Add two extra item slots)

82B:
 482B  cp   $11		FE 11		|	482B  cp   $13		FE 13	(total icons in second and third column + 1)
 482D  ld   de,$6828	11 28 68
 4830  jr   z,$4838	28 06
 4832  cp   $08		FE 08		|	4832  cp   $0A		FE 0A	(total icons in third column + 1)

	Explanation: Without the above, the two extra item slots would go into the first column.

5234:
 9234  ld   de,$C530	11 30 C5	|
 9237  ld   b,$18	06 18		|	9237  ld   b,$11	06 11	// Separates third column and allows blank spots between cards

	Explanation: There is code that groups all icons together - preventing any blank spots in inventory.
	We only want that code to check the first two columns.


Fix Cursor:

Note: There was no space for extra cursor positions, so had to code it...

3DB:
 43DB  ld   ($C155),de	ED 53 55 C1	|	43DB  call $BFE0, nop		CD E0 BF 00
 43DF  jr   $43A0	18 BF

DFE0:
 BFE0  cp   $1A		FE 1A
 BFE2  jr   nz,$BFE7	20 03
 | BFE4  ld   de,$B09C	11 9C B0	// Cursor second-last slot
 BFE7  cp   $1B		FE 1B
 BFE9  jr   nz,$BFEE	20 03
 | BFEB  ld   de,$B0AC	11 AC B0	// Cursor bottom-right slot
 BFEE  ld   ($C155),de	ED 53 55 C1
 BFF2  ret		C9

FE 1A 20 03 11 9C B0 FE 1B 20 03 11 AC B0
ED 53 55 C1 C9

3F16:
 7F16  ld   a,($C154)	3A 54 C1
 7F19  cp   $11		FE 11		|	7F19  cp   $13		FE 13
 7F1B  ret  nc		D0
 7F1C  add  a,$09	C6 09		// CURSOR RIGHT

3F3A:
 7F3A  cp   $19		FE 19		|	7F3A  cp   $1B		FE 1B
 7F3C  ret  z		C8
 7F3D  inc  a		3C		// CURSOR DOWN


Keycards Go To Third Column:

4DE8:
 8DE8  ld   (hl),c	71		|	8DE8  di		F3		// disable interrupts
 8DE9  ld   a,c		79		|	8DE9  ld   a,$0C	3E 0C
 8DEA  cp   $08		FE 08		|	8DEB  ld   ($A000),a	32 00 A0	// change A000-BFFF bank
 8DEC  jr   nz,$8DF7	20 09		|	8DEE  call $BF60	CD 60 BF
 8DEE  ld   a,$10	3E 10		|	8DF1  ld   a,$03	3E 03
 8DF0  ld   ($C160),a	32 60 C1	|	8DF3  ld   ($A000),a	32 00 A0	// change A000-BFFF bank
 8DF3  xor  a		AF		|	8DF6  ei		FB		// enable interrupts
 8DF4  ld   ($C15F),a	32 5F C1	|	
 8DF7  call $8F1F	CD 1F 8F	

F3 3E 0C 32 00 A0 CD 60 BF 3E 03 32 00 A0 FB

19F60:
 BF60  ld   a,c		79
 BF61  cp   $0E		FE 0E
 BF63  jr   c,$BF6E	38 09
 | BF65  cp   $16	FE 16
 | BF67  jr   nc,$BF6E	30 05	// If picked up item is keycard (0E to 15)
 | | BF69  rlca		07
 | | BF6A  rlca		07	// Times 4
 | | BF6B  add  a,$40	C6 40	// Place in allocated spot: C578 to C594
 | | BF6D  ld   l,a	6F

 BF6E  ld   (hl),c	71
 BF6F  cp   $08		FE 08
 BF71  jr   nz,$BF7C	20 09
 | BF73  ld   a,$10	3E 10
 | BF75  ld   ($C160),a	32 60 C1
 | BF78  xor  a		AF
 | BF79  ld   ($C15F),a	32 5F C1
 BF7C  ret		C9

79 FE 0E 38 09 FE 15 30 05 07 07 C6 40 6F
71 FE 08 20 09 3E 10 32 60 C1 AF 32 5F C1 C9


Keycards from "HIRAKE GOMA" Cheat Code Go To Third Column:

DFAD:
 BFAD  ld   hl,$C530	21 30 C5	|	BFAD  ld   hl,$C578	21 78 C5	// Start checking for free spots at C578
 BFB0  ld   a,(hl)	7E
 BFB1  and  a		A7
 BFB2  jr   z,$BFBB	28 07





ELEVATOR AUTO-SAVES:

DE64:
     BE64  79 79  79 00  F0 03  F0 1F  F2 27  F1 0F  F1 1B  F2 35	|	79 79  79 00  03 F0  1F F0  27 F2  0F F1  1B F1  35 F2
     BE74  F1 3F  F3 48  F5 CE  F3 5F  F5 CF  F4 58  F6 9A  F3 51	|	3F F1  48 F3  CE F5  5F F3  CF F5  58 F4  9A F6  51 F3
     BE84  F5 CD  F7 6D  FA 73  A5 08  0A CC  40 0B  49 45  7D 5D	|	CD F5  6D F7  73 FA
     BE94  38 7B  66 4B  6C 68  69 4E  6E 6B  76 74  7B 38		

[Room, PrevRoom] - swapped these around for elevators (F0-FA)



ELEVATOR MENUS:

2F9B:
 6F9B  ld   a,($C130)	3A 30 C1
 6F9E  cp   $E0		FE E0
 6FA0  jr   nc,$6FCB	30 29		|	nop, nop	00 00		// PAUSE IN ELEVATORS / LADDERS

30F0:
 70F0  ld   a,($C130)	3A 30 C1
 70F3  cp   $F0		FE F0
 70F5  ret  nc		D0		|	nop		00		// MENU IN ELEVATORS (NEED ABOVE)



NO UNSKIPPABLE TEXT:

1D99:
 5D99  ld   a,($CEE0)	3A E0 CE	// SkipTextMode (00 = skippable, 01 = unskippable (can skip after msg typed), 02 = unskippable (wait for next msg)
 5D9C  dec  a		3D
 5D9D  jr   z,$5DB2	28 13		|	5D9D  nop nop	00 00
 5D9F  dec  a		3D
 5DA0  jr   z,$5DB2	28 10		|	5DA0  nop nop	00 00

SkipTextMode 1 is used by Big Boss / Fire Trooper
SkipTextMode 2 is used by Other Bosses / Fake Madnar / Elevator Guards / Sleepy Guards / Capture Guards / Desert Guards / Ellen "Help Me"

1E6B:
 5E6B  ld   a,($CEE0)	3A E0 CE	|	5E6B  ld   a,($C006)	3A 06 C0	// ControlsTrigger
 5E6E  cp   $02		FE 02		|	5E6E  and  $20		E6 20
 5E70  jr   z,$5E9A	28 28		|	5E70  jp   nz,$5E9F	C2 9F 5E
 5E72  ld   a,($C006)	3A 06 C0	|	5E73  ld   a,($C112)	3A 12 C1	// FKeysTrigger
 5E75  and  $20		E6 20		|	5E76  and  $20		E6 20
 5E77  jr   nz,$5E9F	20 26		|	5E78  jp   nz,$5E9F	C2 9F 5E
 5E79  ld   a,($C112)	3A 12 C1	|	5E7B  ld   a,($CEE0)	3A E0 CE	// SkipTextMode
 5E7C  and  $20		E6 20		|	5E7E  cp   $02		FE 02
 5E7E  jp   nz,$5E9F	C2 9F 5E	|	5E80  jp   z,$5E9A	CA 9A 5E
 5E81  ld   a,($CEE0)	3A E0 CE	|	5E83  nop		00
 5E84  dec  a		3D

// Reordered the above so that it checks for input even if SkipTextMode = 02 (unskippable, wait for next msg)

3A 06 C0 E6 20 C2 9F 5E 3A 12 C1 E6 20 C2 9F 5E 3A E0 CE FE 02 CA 9A 5E 00



CAN USE RATION/ANTIDOTE WITH PUNCH BUTTON:

3EF1:
 7EF1  ld   a,($C006)	3A 06 C0
 7EF4  bit  4,a		CB 67		|	7EF4  and  $30		E6 30
 7EF6  jp   nz,$7F76	C2 76 7F	|	7EF6  jp   nz,$7F76	C2 76 7F
 7EF9  and  $0F		E6 0F		|	7EF9  ld   hl,$C15C	21 5C C1
 7EFB  jr   nz,$7F08	20 0B		|	7EFC  ld   a,($C006)	3A 06 C0
 | 7EFD  ld   a,($C007)	3A 07 C0	|	7EFF  and  $0F		E6 0F
 | 7F00  and  $0F	E6 0F		|	7F01  jr   nz,$7F0B	20 08
 | 7F02  ret  z		C8		|	| 7F03  ld   a,($C007)	3A 07 C0
 | 7F03  ld   hl,$C15C	21 5C C1	|	| 7F06  and  $0F	E6 0F
 | 7F06  dec  (hl)	35		|	| 7F08  ret  z		C8
 | 7F07  ret  nz	C0		|	| 7F09  dec  (hl)	35
 7F08  ld   hl,$C15C	21 5C C1	|	| 7F0A  ret  nz		C0
 7F0B  ld   (hl),$08	36 08
 7F0D  rra		1F

E6 30 C2 76 7F 21 5C C1 3A 06 C0 E6 0F 20 08 3A 07 C0 E6 0F C8 35 C0



GETTING SCHNEIDER'S FREQUENCY:

	If you call Big Boss in Room 1E (below first camera room), he says: "THERE MUST BE SOME RESISTANCE. TRY TO CONTACT WITH THE TRANSCEIVER!"
	Cycle through the radio channels in this room (or Room 01, 1F, 21) and Schneider will pick up.

	There are patrolling guards on this screen (1E), so it's not really ideal for an incoming call.
	Big Boss already has a message to give in the screen above (camera room) and to the left (ammo room).
	But there are no radio messages in the first prisoner room - so let's have him call there.

	BIG BOSS CALLS (PRISONER ROOM 94):
	18298 change from 01 to 08 for incoming call.
	1F7EE: C5 B6		|	6B B6			// Use same room calls as Room 1E
	1F66B: 14 14 21 17	|	18 14 21 17		// Set freq / auto-dial Big Boss

DISABLE AUTO-DIAL AFTER CALL

29CC:
 69CC  xor  a		AF		|	69CC  di		F3		// disable interrupts
 69CD  ld   ($C806),a	32 06 C8	|	69CD  ld   a,$0C	3E 0C
 69D0  ld   ($C801),a	32 01 C8	|	69CF  ld   ($A000),a	32 00 A0	// change A000-BFFF bank
 69D3  inc  a		3C		|	69D2  call $BF80	CD 80 BF
 69D4  ld   ($C805),a	32 05 C8	|	69D5  ld   a,$03	3E 03
 69D7  ld   hl,$C153	21 53 C1	|	69D7  ld   ($A000),a	32 00 A0	// change A000-BFFF bank back
 69DA  ld   (hl),a	77		|	69DA  ei		FB		// enable interrupts
 69DB  ld   a,($C922)	3A 22 C9
 69DE  and  a		A7
 69DF  ld   a,$50	3E 50
 69E1  call z,$427C	CC 7C 42

F3 3E 0C 32 00 A0 CD 80 BF 3E 03 32 00 A0 FB

19F80:
 BF80  ld   a,$01		3E 01
 BF82  ld   hl,($C803)		2A 03 C8
 BF85  inc  hl			23
 BF86  inc  hl			23
 BF87  ld   (hl),a		77		// Auto-reply on message set to 1 (off) after call

 BF88  xor  a			AF
 BF89  ld   ($C806),a		32 06 C8
 BF8C  ld   ($C801),a		32 01 C8
 BF8F  inc  a			3C
 BF90  ld   ($C805),a		32 05 C8
 BF93  ld   hl,$C153		21 53 C1
 BF96  ld   (hl),a		77
 BF97  ret			C9

3E 01 2A 03 C8 23 23 77
AF 32 06 C8 32 01 C8 3C 32 05 C8 21 53 C1 77 C9


SCHNEIDER BASEMENT CALLS (ROOM 3A): 

1823E change from 10 to 18 for incoming call
1F681 change from 25 to 29 (sets freq and auto-dials)

JENNIFER 4-STAR CALLS (ROOM 56/57):

5C9:
 45C9  ld   a,(hl)	7E		|	45C9  call $BFA0	CD A0 BF
 45CA  and  $08		E6 08		|	
 45CC  ld   c,$02	0E 02
 45CE  jr   z,$45D7	28 07

19FA0:
 BFA0  ld   a,($C130)	3A 30 C1
 BFA3  or   $01		F6 01		// Add 1 to RoomNum if even number (56->57)
 BFA5  cp   $57		FE 57
 BFA7  jr   nz,$BFB6	20 0D		// Jump if not in Room 56/57
 | BFA9  ld   a,$02	3E 02
 | BFAB  ld   ($C882),a	32 82 C8	// Set auto-dial
 | BFAE  ld   a,$48	3E 48
 | BFB0  ld   ($C138),a	32 38 C1	// Set freq to 48 (Jen)
 | BFB3  and  $08	E6 08		// A = 8 (incoming call) (zero flag cleared)
 | BFB5  ret		C9
 BFB6  ld   a,(hl)	7E
 BFB7  and  $08		E6 08
 BFB9  ret		C9

3A 30 C1 F6 01 FE 57 20 0D
3E 02 32 82 C8 3E 48 32 38 C1 E6 08 C9 7E E6 08 C9


The below code prevented Jennifer from delivering the rocket / opening the door, if the player skipped her text.
You could still just close the radio to skip it, so it seems pointless and potentially confusing on replays. Removed the check.

1F19:
 5F19  ld   a,($CEE3)		3A E3 CE	// CEE3 = SkipTextFlag		|
 5F1C  and  a			A7						|
 5F1D  ret  nz			C0		// If SkipText, exit		|	5F1D  nop			00
 5F1E  ld   hl,$C661		21 61 C6	// C661 = JenniferRocketFlag	|
 5F21  ld   a,($CEF0)		3A F0 CE	// CEF0 = TextId		|
 5F24  cp   $75			FE 75
 5F26  jr   z,$5F35		28 0D
 | 5F28  ld   hl,$C663		21 63 C6	// C663 = JenniferOpenDoorFlag
 | 5F2B  cp   $76		FE 76
 | 5F2D  jr   z,$5F35		28 06
 | | 5F2F  ld   hl,$C662	21 62 C6	// C662 = SchneiderCapturedFlag
 | | 5F32  cp   $8A		FE 8A
 | | 5F34  ret  nz		C0
 5F35  ld   (hl),$01		36 01
 5F37  ret			C9




REMOVE BASEMENT WALL LEADING TO ENEMY UNIFORM (ROOM 3B)

1F055 change from 30 to 80




OXYGEN TANK IN COMPASS ROOM (B8):

DB38 change from 13 (Compass) to 12 (Oxygen Tank)

RENAME "BOMBE" (OXYGEN TANK) TO "SCUBA":
	D95C  42 4F 4D 42 45 FF		|	D95C  53 43 55 42 41 FF
	      B  O  M  B  E			      S  C  U  B  A


COMPASS IN ROOM NEXT TO COWARD DUCK (C0):

DB5D change from 23 (Ammo) to 13 (Compass) and position on table (20 48):
	DB5D  23 18 68 23 50 40 FF	|	DB5D  13 20 48 23 50 40 FF

DISABLE COMPASS MESSAGE:

	Msg 7A:		THIS IS MR.SCHNEIDER...
			THE COMPASS CAN BE
			FOUND ON THE 2ND FLOOR.
			...OVER

	1F68B  45 7A	|	1F68B  05 7A
	1F699  44 7A	|	1F699  04 7A
	1F69D  45 7A	|	1F69D  05 7A
	1F6C3  45 7A	|	1F6C3  05 7A

	// Alternatively, could change the message to: "THE COMPASS IS AT THE END OF THE STREAM."


RATION IN OXYGEN TANK ROOM (C8):

DB64 change from 12 (Oxygen Tank) to 1E (Ration)

CHANGE OXYGEN TANK MESSAGE:

1F6AA change from 87 to 86 (Jennifer's Call outside Oxygen Tank Room - i.e. Room 73)

Msg 87:				Msg 86:

THIS IS JENNIFER...		THIS IS JENNIFER...
THERE IS AN OXYGEN		YOU SHOULD BREAK DOWN
CYLINDER BEYOND			THE WALL.
THE WALL.			...OVER
...OVER




WEAPON MAX RANKS:	0518A	50 00 	50 00 	15 00 	05 00 	05 00 	05 00 	05 00 	05 00
			0519A	00 01 	00 01 	30 00 	10 00 	10 00 	10 00 	10 00 	10 00
			051AA	00 02 	00 02 	60 00 	20 00 	15 00 	15 00 	15 00 	15 00
			051BA	00 03 	00 03 	90 00 	30 00 	20 00 	20 00 	20 00 	20 00
			051CA	99 09 	99 09 	99 09 	99 09 	99 09 	99 09 	99 09 	99 09
				HandG	SMG	GrenL	RockL	Bombs	Mines	Missl	?


			Set 5192,51A2,51B2 = 20	// Plastic Explosives max capacity will always be 20


METAL GEAR ROOM (ROOM 76) - ADD AMMO / EXPLOSIVES:

DBE9:
 BBE9  ld   a,($C130)	3A 30 C1	|	BBE9  call $BFCC	CD CC BF

DFCC:
 BFCC  ld   a,($C130)	3A 30 C1
 BFCF  cp   $76		FE 76		// If Room = 76
 BFD1  ret  nz		C0
 BFD2  ld   a,$9B	3E 9B		// Then A = 9B (Unused Room)
 BFD4  ret		C9

3A 30 C1 FE 76 C0 3E 9B C9


DA10  00									|	2C	// Unused Index (2C) for Unused Room (9B)

DAA6  7B BB    7F BB    83 BB    87 BB 						|	7B BB    82 BB    86 BB    8A BB	// Update Index for below

DB7B  23 50 18 FF    1E 40 48 FF    07 20 48 FF    23 50 60 23 70 A8 FF		|	23 39 19 05 38 D8 FF    1E 40 48 FF    07 20 48 FF    23 70 A8 FF

      ^ Unused Item Layout (2C)                    ^ Layout for Room C4/D8 (2F)		^ New Item Layout for Metal Gear Room                 ^ Removed 1
        23=Ammo, Y=50, X=18			     Has TWO ammo boxes                   23=Ammo 05=Bombs                                      Ammo Box



ADJUST ELECTRIC GRID LAYOUT OUTSIDE COWARD DUCK:

													     __ __
    1B760  25 24 25 11 14 19 07 14  08 09 0A 9F 14 19 07 14	|	25 24 25 11 14 19 07 14  08 09 0A 9F 1C 1D 07 14
    1B770  17 1F 1F 1B 1C 1D 07 14  19 07 A9 A9 1A 1B A9 14	|	17 1F 1F 1B 1A 1B 07 14  AA A9 A9 A9 A9 A9 A9 C7
										    ^^ ^^	 ^^ ^^       ^^ ^^    ^^
Electric Grids (19, 07, 1A, 1B, 14) replaced with regular flooring (AA, A9, and the newly made C7).
Center Pillar pushed back as I didn't have two spare metatiles for its shadow.

Found a duplicate metatile (Range: 1C2C0 - 1D2BF), and used it for the bottom-right corner (C7).
The duplicate was at 1CF10/1CF20 (C6/C7), and each tile was only used once (Room 0F/1F). 
Kept C6 - as it pairs well with C5. Replacing C7 below.

DUPLICATE METATILE (C6/C7):
    1CF10  60 60 60 60 60 60 60 60 60 60 60 60 21 17 60 60	|	
    1CF20  60 60 60 60 60 60 60 60 60 60 60 60 21 17 60 60	|	42 42 4C 1C 42 42 4D 1C 42 42 4C 1C 42 42 4D 1C

WHERE IT WAS USED (ROOM 0F):									       __
    1A570  07 07 07 07 07 12 77 16  0D 0D C7 07 07 10 20 21	|	07 07 07 07 07 12 77 16  0D 0D C6 07 07 10 20 21	// CHANGE C7 to C6



CARD1 DOOR BELOW SHOOTGUNNER (39) - Set 1F08F from 03 to 02
Added Ration to Building2 Roof Cell (BA) - Set DA2F to 23
Added Ration to Building2 Basement Cell (CB) - Set DA40 to 23	// Alternatively, could make it a spare gas mask (set to 05)
Added Ration to Building1 Basement Grey Fox Cell (A4) - Set DA19 to 23



SENTINEL GUARDS TURNING:

1B38:
 5B38  ld   a,r		ED 5F			// R = Memory Refresh Register (increments every instruction - Range: 00-7F)
 5B3A  ld   (ix+$5d),a	DD 77 5D	|	5B3A  call $BFD6	CD D6 BF
 5B3D  jp   $4248	C3 48 42	|	

DFD6:
 BFD6  cp   $10		FE 10
 BFD8  jr   nc,$BFDC	30 02
 | BFDA  add  a,$10	C6 10		// Add 10 cycles to wait if A < 10
 BFDC  ld   (ix+$5d),a	DD 77 5D
 BFDF  ret		C9

FE 10 30 02 C6 10 DD 77 5D C9



REMOVING IMMEDIATE ALERTS:

Guard Positions 		B07E - B55F	(907E, 4E2 bytes)
Guard Paths			BEA1 - C1CE	(9EA1, 32E bytes)
Guard Path Pointers		C1CF - C2DE	(A1CF, 110 bytes)
Guard Path Pointer to Pointer	C2DF - C444	(A2DF, 166 bytes)

Room 0B (11) - BUILDING 1, GROUND, TOP-CENTER (EXIT TO DESERT):
    C1E3:  C5 A1    C5 A1    B1 A1    B1 A1				|	C5 A1    C5 A1    B7 A1    B7 A1			// Path Pointers
	// A1C5 = (2, 0, 3) = (L, U, R)						// A1B7 = (3, 1, 2) = (R, D, L)
	// A1B1 = (2, 1) = (L, D)

Room 0D (13) - BUILDING 1, GROUND, MID-RIGHT (OUTSIDE SMG ROOM):

    B0F5:  02    04 70 58    04 60 88					|	02    04 A8 98    04 38 88				// Pos

    BF15:  03 B0 58 80 58 20 58    06 20 88 70 88 70 A8 B0 A8		|	03 A8 58 80 58 20 58    06 70 88 70 A8 B0 A8 70 A8	// Paths
    BF25:  70 A8 70 88							|	70 88 20 88

Room 0E (14) - BUILDING 1, GROUND, MID-RIGHT (CAMERA ROOM):
    B0FC:  03    06 98 40    06 50 C0    06 B8 A0			|	03    06 98 40    06 50 C0    06 98 A0			// Pos (Cams)

Room 1E (30) - BUILDING 1, LVL 2, MID-LEFT (BELOW CAMERA ROOM):
    B171:  02    1E 90 C8    1E B0 38					|	02    1E AB C8    1E B0 38    				// Pos

    BFCE:  04 AB C8 AB 68 AB C8 30 C8    04 B0 68 58 68 58 38		|	04 AB 78 AB C8 30 C8 AB C8    04 B0 68 58 68 58 38	// Paths
    BFDE:  B0 38							|	B0 38

// Not technically an immediate alert - there is a chance that the guard will look up when he reaches the bottom of the screen.
// The player might not have a box yet, and so the only way to guarantee avoiding detection would be to run down and punch the guard.
// Also moved the guard's path back a little to avoid sprite overlapping with the other guard.

Room 26 (38) - BUILDING 1, LVL 2, MID-RIGHT (ABOVE ELECTRIC GRID ROOM):
    B1A9:  02    04 50 38    1E 88 40					|	02    04 90 C8    1E 88 40				// Pos

    C055:  04 10 38 50 38 90 38 B8 38    04 88 C8 10 C8 88 C8		|	04 90 38 10 38 90 38 90 C8   04 88 C8 10 C8 88 C8	// Paths
    C065:  88 68 							|	88 68

Room 27 (39) - BUILDING 1, LVL 2, TOP-RIGHT (OUTSIDE ELEVATOR):
    C24D:  AE A1    B1 A1    AE A1    B1 A1				|	C0 A1    C0 A1    C0 A1    C0 A1			// Path Pointers
	// (3, 1), (2, 1), (3, 1), (2, 1)					// (3, 1, 2, 1)
	// (R, D), (L, D), (R, D), (L, D)					// (R, D, L, D)

	// NOTE: Only two guards are on-screen.
	// The second two are used if player came from elevator.

Room 2B (43) - BUILDING 1, ROOF, TOP-LEFT:
    B1C1:  02    05 90 18    04 28 E8 					|	02    05 90 68    04 28 98				// Pos

    C070:  04 90 68 38 68 38 18 90 18   04 28 98 88 98 88 E8 		|	04 38 68 38 18 90 18 90 68    04 88 98 88 E8 28 E8	// Paths
    C080:  28 E8							|	28 98

Room 46 (70) - BUILDING 2, GROUND, BOTTOM-LEFT (LEFT OF ENTRANCE):
    B28A:  02    04 45 50    04 2B A0 					|	02    04 45 50    04 45 C0				// Pos

    C0D6:  02 45 18 45 50    02 2B 90 2B F0				|	02 45 18 45 50    02 45 90 45 F0			// Paths

Room 4A (74) - BUILDING 2, GROUND, CENTER (OUTSIDE ANTENNA ROOM):
    B295:  03    04 28 C0    04 60 30    04 AB 90			|	03    04 28 C0    04 60 30    04 A8 90			// Pos

    C0E0:  02 28 90 28 F0    02 48 30 90 30    02 AB 30 AB 90		|	02 28 90 28 F0    02 90 30 48 30    02 A8 30 A8 90	// Paths
										// I moved Guard 3 higher (A8) so you don't have to 
										// punch him or take damage to get past him undetected.

Room 4D (77) - BUILDING 2, GROUND, MID-RIGHT (WATER ROOM):
    B2A3:  03    30 28 28    04 88 D8    04 AB C0			|	03    30 28 28    04 88 D8    04 A8 90			// Pos

    C0EF:  02 50 D8 B0 D8    02 AB 60 AB C0				|	02 B0 D8 50 D8    02 A8 C0 A8 60			// Paths (Guard 2/3)
										// I moved Guard 3 higher (A8) so you don't have to 
										// punch him or take damage to get past him undetected.

    C27D:  C0 A1    EF A0    F4 A0					|	B7 A1    EF A0    F4 A0					// Path Pointers
	// A1C0 = (3, 1, 2, 1) = (R, D, L, D)					// A1B7 = (3, 1, 2) = (R, D, L)

Room 4F (79) - BUILDING 2, LVL 1, BOTTOM-LEFT (OUTSIDE AMMO ROOM):
    B2AD:  04    1E 30 40    1E AB 20    1E 48 90    04 70 E0		|	04    1E 30 40    1E A8 20    1E 48 90    04 48 E0	// Pos

    C0F9:  04 40 40 80 40 80 20 40 20    02 AB 60 AB 20    03 60	|	04 40 40 80 40 80 20 40 20    02 A8 60 A8 20    03 60	// Paths
    C109:  90 38 90 18 90    03 10 E0 1C E0 70 E0 			|	90 38 90 18 90    03 70 E0 10 E0 1C E0

Room 50 (80) - BUILDING 2, LVL 1, MID-LEFT (GUARDING DOCTOR):
    B2BA:  03    30 70 30    30 30 88    30 58 98 			|	03    30 70 30    30 30 88    30 54 78			// Pos

    C28B:  B7 A1    B7 A1    B7 A1					|	C0 A1    C0 A1    C0 A1					// Path Pointers
	// A1B7 = (3, 1, 2) = (R, D, L)						// A1C0 = (3, 1, 2, 1) = (R, D, L, D)

Room 51 (81) - BUILDING 2, LVL 1, TOP-LEFT (OUTSIDE ELEVATOR):
    B2C4:  04    04 80 1C    04 30 20    04 2B E0    04 B0 E0		|	04    04 98 1C    04 30 50    04 2B A0    04 98 DC	// Pos

    C115:  02 B0 1C 80 1C    04 30 50 30 20 70 20 30 20    04 2B	|	02 80 1C B0 1C 	  04 30 20 70 20 30 20 30 50    04 2B	// Paths
    C125:  A0 2B E0 60 E0 2B E0    03 78 E0 90 E0 B0 E0 		|	E0 60 E0 2B E0 2B A0    03 78 DC 90 DC B0 DC

Room 52 (82) - BUILDING 2, LVL 1, BOTTOM-CENTER (BELOW ARNOLD ROOM):
    C299:  C5 A1    C0 A1    B4 A1    C5 A1 				|	C0 A1    C0 A1    C5 A1    C5 A1 			// Path Pointers
	// A1C5 = (2, 0, 3) = (L, U, R)						// A1C0 = (3, 1, 2, 1) = (R, D, L, D)
	// A1B4 = (2, 0) = (L, U)						// A1C5 = (2, 0, 3) = (L, U, R)

Room 54 (84) - BUILDING 2, LVL 1, TOP-CENTER (ABOVE ARNOLD ROOM):
    B2E5:  04    1E 2A 40    1E 70 30    05 30 E0    05 70 A0		|	04    1E 2A 40    1E 90 30    05 30 E0    05 70 A0	// Pos

    C133:  04 2A 60 2A 40 2A 20 2A 40    03 B0 30 90 30 70 30		|	04 2A 20 2A 40 2A 60 2A 40    03 70 30 B0 30 90 30	// Paths
    C143:  02 30 90 30 E0    04 70 88 70 9A 70 D0 70 9A 		|	02 30 90 30 E0    04 70 88 70 9A 70 D0 70 9A

Room 56 (86) - BUILDING 2, LVL 1, MID-RIGHT (OUTSIDE R.LAUNCHER ROOM):
    B2F6:  03    30 68 D0    04 40 30    04 AB 58 			|	03    30 68 D4    04 40 34    04 A8 58			// Pos	

    C15C:  02 60 30 28 30    02 AB B0 AB 58 				|	02 60 34 28 34    02 A8 B0 A8 58			// Paths (Guard 2/3)

Room 57 (87) - BUILDING 2, LVL 1, TOP-RIGHT (OUTSIDE COMPASS ROOM):
    C2B1:  C5 A1    B1 A1    B4 A1 					|	B7 A1    C0 A1    B7 A1					// Path Pointers
	// (2, 0, 3), (2, 1), (2, 0)						// (3, 1, 2), (3, 1, 2, 1), (3, 1, 2)
	// (L, U, R), (L, D), (L, U)						// (R, D, L), (R, D, L, D), (R, D, L)

Room 6B (107) - BUILDING 3, GROUND, END OF WATER PASSAGE:
    B3D4:  04    04 40 30    04 50 D0    04 B0 30    04 B0 D0		|	04    04 30 30    04 30 D0    04 78 30    04 70 D0	// Pos	

    C166:  04 17 30 17 60 17 30 40 30    04 25 D0 25 A0 25 D0		|	04 40 30 17 30 17 60 17 30    04 50 D0 25 D0 25 A0	// Paths
    C176:  50 D0    02 78 30 B0 30    02 70 D0 B0 D0			|	25 D0    02 B0 30 78 30    02 B0 D0 70 D0

Room B5 (181) - BUILDING 2, LVL 1, AMMO ROOM:
    B4D4:  02    0A 66 88    0A 32 BC					|	00    0A 66 88    0A 32 BC			// Pos (Guards removed)

Room B7 (183) - BUILDING 2, LVL 1, ANTIDOTE ROOM:
    B4DF:  02    0B 72 50    0B 54 A1 					|	00    0B 72 50    0B 54 A1			// Pos (Guards removed)



BOSS HURT COLOR CHANGE:

// EnemyHurt Code
4D28:
 8D28  ld   a,(iy+$0d)	FD 7E 0D	|	8D28  ld   a,$80	3E 80
 8D2B  sub  c		91		|	8D2A  call $8C36	CD 36 8C	// Call Below Code with A=80
 8D2C  jr   nc,$8D2F	30 01		|	8D2D  nop		00
 | 8D2E  xor  a		AF		|	8D2E  nop		00
 8D2F  ld   (iy+$0d),a	FD 77 0D	|	8D2F  nop nop nop	00 00 00
// No Damage Code
 8D32  ld   a,(ix+$00)	DD 7E 00		3E 80 CD 36 8C 00 00 00 00 00
 8D35  cp   $03		FE 03			
 8D37  jp   c,$821F	DA 1F 82
 8D3A  ret		C9

// ChkPlayerShots Code
4C33:
 8C33  ld   a,($C142)	3A 42 C1							// C142 = WeaponInUse
 8C36  and  a		A7		|	8C36  push af		F5
 8C37  ret  z		C8		|	8C37  di		F3		// disable interrupts
 8C38  ld   hl,$8951	21 51 89	|	8C38  ld   hl,$A000	21 00 A0
 8C3B  cp   $03		FE 03		|	8C3B  ld   (hl),$0C	36 0C		// change A000-BFFF bank to 0C
 8C3D  jr   c,$8C4A	38 0B		|	8C3D  call $BEC0	CD C0 BE
 8C3F  cp   $04		FE 04		|	8C40  ld   a,$03	3E 03
 8C41  jr   z,$8C4A	28 07		|	8C42  ld   ($A000),a	32 00 A0	// change A000-BFFF bank to 03
 8C43  cp   $07		FE 07		|	8C45  ei		FB		// enable interrupts
 8C45  jr   z,$8C4A	28 03		|	8C46  pop  af		F1
 8C47  ld   hl,$8992	21 92 89	|	8C47  and  $7F		E6 7F		// AND 0111 1111
 8C4A  ld   ($EC02),hl	22 02 EC	|	8C49  ret  z		C8		// If A=00 or 80, return
					|	8C4A  nop nop nop	00 00 00
 8C4D  call $4384	CD 84 43

F5 F3 21 00 A0 36 0C CD C0 BE 3E 03 32 00 A0 FB F1 E6 7F C8 00 00 00


19EC0:
 BEC0  cp   $80			FE 80
 BEC2  jr   z,$BEE8		28 24
 | BEC4  and  a			A7		// ChkPlayerShots Code
 | BEC5  jr   z,$BED9		28 12
 | | BEC7  ld   hl,$8951	21 51 89
 | | BECA  cp   $03		FE 03
 | | BECC  jr   c,$BED9		38 0B
 | | | BECE  cp   $04		FE 04
 | | | BED0  jr   z,$BED9	28 07
 | | | | BED2  cp   $07		FE 07
 | | | | BED4  jr   z,$BED9	28 03
 | | | | | BED6  ld   hl,$8992	21 92 89
 | BED9  ld   ($EC02),hl	22 02 EC
 | BEDC  ld   a,($D010)		3A 10 D0	// NEW CODE: ChkEnemyHurtTimer (D010 = EnemyHurtTimer)
 | BEDF  and  a			A7
 | BEE0  ret  z			C8		// If EnemyHurtTimer == 0, return
 | BEE1  dec  a			3D
 | BEE2  ld   ($D010),a		32 10 D0	// Decrement EnemyHurtTimer
 | BEE5  jr   z,$BF13	 o	28 2C		// If EnemyHurtTimer == 0, jump to ChangeBossColor Code
 | BEE7  ret		 |	C9
			 |
 BEE8  ld   a,(iy+$0d)	 |	FD 7E 0D	// EnemyHurt Code
 BEEB  sub  c		 |	91
 BEEC  jr   nc,$BEEF	 |	30 01
 | BEEE  xor  a		 |	AF
 BEEF  ld   (iy+$0d),a	 |	FD 77 0D
			 |
 BEF2  ld   a,($D000)	 |	3A 00 D0	// NEW CODE: ChkBossHurt
 BEF5  cp   $09		 |	FE 09		// TANK (09)
 BEF7  jr   z,$BF0C	 |	28 13
 | BEF9  cp   $12	 |	FE 12		// BULLDOZER (12)
 | BEFB  jr   z,$BF0C	 |	28 0F
 | | BEFD  cp   $23	 |	FE 23		// IF LASER (23), RETURN
 | | BEFF  ret  z	 |	C8
 | | BF00  cp   $25	 |	FE 25		// IF FLAME (25), RETURN
 | | BF02  ret  z	 |	C8
 | | BF03  cp   $29	 |	FE 29		// COWARD DUCK (29)
 | | BF05  jr   z,$BF0C	 |	28 05
 | | | BF07  sub  $20	 |	D6 20
 | | | BF09  cp   $07	 |	FE 07		// BIG BOSS (20), SHOTGUNNER (21), M.GUN KID (22), FIRE TROOPER (24), HIND-D (26)
 | | | BF0B  ret  nc	 |	D0
 BF0C  ld   a,c		 |	79		
 BF0D  and  c		 |	A1
 BF0E  ret  z		 |	C8		// Return if BossDamage == 0
 BF0F  ld   (iy+$10),$10 |	FD 36 10 10	// D010 = 10 cycles		(D010 is our newly created EnemyHurtTimer)
			 |
 BF13  ld   a,($D000) <--|	3A 00 D0	// NEW CODE: ChangeBossColor
 BF16  cp   $26			FE 26		// HIND-D (26)
 BF18  jr   nz,$BF2C		20 12
 | BF1A  ld   de,$7000		11 00 70	// RED	(RB0G)
 | BF1D  ld   a,($D010)		3A 10 D0
 | BF20  and  a			A7
 | BF21  jr   nz,$BF26		20 03
 | | BF23  ld   de,$1003	11 03 10	// OG GREEN (RB0G)
 | BF26  ld   a,$01		3E 01		// PALETTE 1
 | BF28  call $4E66		CD 66 4E	// SetPaletteColor
 | BF2B  ret			C9		// EXIT - Hind-D is a special case (not made of sprites)

 BF2C  ld   bc,$084F		01 4F 08	// NEW COLOR (RED/BLACK)
 BF2F  ld   a,($D010)		3A 10 D0	
 BF32  and  a			A7
 BF33  jr   nz,$BF42		20 0D		// If EnemyHurtTimer > 0, Boss = RED
 | BF35  ld   bc,$024D		01 4D 02	// OG COLOR FOR MOST BOSSES
 | BF38  ld   a,($D000)		3A 00 D0
 | BF3B  cp   $13		FE 13
 | BF3D  jr   nc,$BF42		30 03
 | | BF3F  ld   bc,$0B4C	01 4C 0B	// OG COLOR FOR TANK & BULLDOZER
 BF42  ld   de,$0005		11 05 00	// Incrementer (5)
 BF45  ld   hl,$D020		21 20 D0
 BF48  ld   a,(hl)		7E		// A = (D020) = Total Sprites * 2
 BF49  add  hl,de  <-----|	19
 BF4A  ld   (hl),b	 |	70		// (D020 + DE) = B color
 BF4B  add  hl,de	 |	19
 BF4C  ld   (hl),c	 |	71		// (D020 + DE) = C color
 BF4D  sub  $02		 |	D6 02
 BF4F  jr   nz,$BF49 	 o	20 F8
 BF51  ret			C9

FE 80 28 24 A7 28 12 21 51 89 FE 03 38 0B FE 04 28 07 FE 07 28 03 21 92 89
22 02 EC 3A 10 D0 A7 C8 3D 32 10 D0 28 2C C9 FD 7E 0D 91 30 01 AF FD 77 0D
3A 00 D0 FE 09 28 13 FE 12 28 0F FE 23 C8 FE 25 C8 FE 29 28 05 D6 20 FE 07 D0 79 A1 C8 FD 36 10 10
3A 00 D0 FE 26 20 12 11 00 70 3A 10 D0 A7 20 03 11 03 10 3E 01 CD 66 4E C9
01 4F 08 3A 10 D0 A7 20 0D 01 4D 02 3A 00 D0 FE 13 30 03 01 4C 0B 11 05 00 21 20 D0 7E 19 70 19 71 D6 02 20 F8 C9

FIX HIND-D TOP-LEFT TILE:

Set 1F434 from 1B to 0B to fix Hind-D top-left tile (left wing)

CHANGE CRATES IN HIND-D BOSS ROOM FROM GREEN TO BROWN:

My method for turning HIND-D red when damaged involved updating the screen palette - hence I had to alter the color of the nearby crates.
This was unfortunate... a silver-lining is that the crates now closer resemble the orange color they normally have on rooftops.

BCF:
 4BCF  call $426A	CD 6A 42
 4BD2  call $42C4	CD C4 42
 4BD5  ld   hl,$9509	21 09 95
 4BD8  ld   de,$9400	11 00 94
 4BDB  ld   b,$08	06 08
 4BDD  push hl		E5		|	4BDD  di		F3		// disable interrupts
 4BDE  call $524C	CD 4C 52	|	4BDE  ld   a,$0C	3E 0C
 4BE1  pop  hl		E1		|	4BE0  ld   ($A000),a	32 00 A0	// change A000-BFFF bank to 0C
 4BE2  ld   de,$9840	11 40 98	|	4BE3  call $BE90	CD 90 BE
 4BE5  ld   b,$08	06 08		|	4BE6  ld   ($A000),a	32 00 A0	// change A000-BFFF bank to 09
 4BE7  call $5265	CD 65 52	|	4BE9  ei		FB		// enable interrupts
 4BEA  jr   $4BAE	18 C2

F3 3E 0C 32 00 A0 CD 90 BE 32 00 A0 FB

19E90:
 BE90  ld   a,($E700)	3A 00 E7
 BE93  push af		F5		// Store E700 Palette Value
 BE94  ld   a,($C130)	3A 30 C1
 BE97  cp   $32		FE 32
 BE99  jr   nz,$BEA8	20 0D		// In Hind-D Room?
 | BE9B  ld   a,$04	3E 04
 | BE9D  ld   ($E700),a	32 00 E7	// E700 = Palette 4
 | BEA0  push de	D5
 | BEA1  ld   de,$3102	11 02 31	// BROWN (RB0G)
 | BEA4  call $4E66	CD 66 4E	// SetPalette4 to BROWN
 | BEA7  pop  de	D1
 BEA8  push hl		E5
 BEA9  call $524C	CD 4C 52	// Load3bppTiles (for crates)
 BEAC  pop  hl		E1
 BEAD  ld   de,$9840	11 40 98
 BEB0  ld   b,$08	06 08
 BEB2  call $5265	CD 65 52	// Load3bppTileFlip (for crates)
 BEB5  pop  af		F1
 BEB6  ld   ($E700),a	32 00 E7	// Retore E700 Palette Value
 BEB9  ld   a,$09	3E 09
 BEBB  ret		C9

3A 00 E7 F5 3A 30 C1 FE 32 20 0D 3E 04 32 00 E7 D5 11 02 31 CD 66 4E D1
E5 CD 4C 52 E1 11 40 98 06 08 CD 65 52 F1 32 00 E7 3E 09 C9